#ifndef PRODUCTBROWSESERVICE_H
#define PRODUCTBROWSESERVICE_H

#include <QObject>
#include <QVector>
#include <QMap>
#include <QVariant>
#include "productdao.h"
#include "product.h"

/**
 * 商品浏览服务类
 * 业务逻辑层：为商品浏览页面提供数据处理和业务逻辑
 * 遵循四层架构设计，负责协调数据访问层和表现层
 */
class ProductBrowseService : public QObject
{
    Q_OBJECT

public:
    explicit ProductBrowseService(ProductDAO* productDao, QObject *parent = nullptr);
    ~ProductBrowseService();

    // 获取所有商品信息（包含分类信息）
    QVector<QMap<QString, QVariant>> getAllProductsWithCategory();
    
    // 根据分类获取商品
    QVector<QMap<QString, QVariant>> getProductsByCategory(int categoryId);
    
    // 搜索商品（按名称）
    QVector<QMap<QString, QVariant>> searchProductsByName(const QString& name);
    
    // 获取商品详细信息（包含库存信息）
    QMap<QString, QVariant> getProductDetailById(int productId);
    
    // 获取所有分类信息
    QVector<QMap<QString, QVariant>> getAllCategories();
    
    // 获取分类统计信息
    QMap<int, int> getCategoryStatistics();
    
    // 格式化商品信息（用于显示）
    QString formatProductInfo(const QMap<QString, QVariant>& product);
    
    // 格式化价格显示
    QString formatPrice(double price);
    
    // 检查商品是否允许会员折扣
    bool isDiscountAllowed(int productId);

signals:
    // 数据加载完成信号
    void dataLoaded();
    
    // 错误信号
    void errorOccurred(const QString& error);

private:
    ProductDAO* m_productDao;  // 商品数据访问对象
    
    // 私有辅助方法
    QString getCategoryName(int categoryId);
    QMap<int, QString> m_categoryCache;  // 分类名称缓存
    void loadCategoryCache();  // 加载分类缓存
};

#endif // PRODUCTBROWSESERVICE_H